home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Interactive Reference Guide
/
C-C++ Interactive Reference Guide.iso
/
c_ref
/
csource2
/
sclib_1
/
1_5
/
v7n5070a.txt
< prev
next >
Wrap
Text File
|
1995-11-01
|
13KB
|
444 lines
F I G U R E 1
no data value integer character pointer
returned returned returned
status fdelete sdelete fclear accept
returned fpost spend fcreate gblock
pcreate spost finquiry pend
pextend tcreate fpend qaccept
post tdelete qinquiry qpend
qcreate tpriority screate
qecreate tresume sinquiry
qjam tsuspend tinquiry
qpost waitc
rblock
no status lock tdelay getc ------
returned putc tslice gtime
stime unlock
F I G U R E 1 0
####################################################
# NAME
# sc_fpend - pend on event flag group
#
# SYNOPSIS
# int sc_fpend(efgid,timeout,flags,andor,status)
# int efgid event flag group id number
# int timeout timeout value (ticks)
# int flags event flags mask
# int andor and/or indicator
# int *status return status ptr
#
# DESCRIPTION
# The sc_fpend call pends for one or more events
# on the specified event flag group, and returns
# the event flag group that readied the caller.
# If the andor indicator is AND, all specified
# event flags must have a value of one simul-
# taneously. If the andor indicator is OR, any
# of the specified event flags ready the task.
#
# RETURNS
# event flag group
#
# RETURN CODES
# RET_OK successful return
# ER_TMO timeout
# ER_ID event flag group id error
# ER_DEL event flag group is deleted
####################################################
set VRTX,0 # set VRTX trap number
set FCODE,0x19 # set VRTX function code
text
global sc_fpend
sc_fpend:
mov.l %d2,-(%sp) # save registers
mov.l %d3,-(%sp)
mov.l %d4,-(%sp)
mov.l (16,%sp),%d1 # put event flag group id into d1
mov.l (20,%sp),%d2 # put timeout into d2
mov.l (24,%sp),%d3 # put event flags mask into d3
mov.l (28,%sp),%d4 # put and/or indicator into d4
mov.l &FCODE,%d0 # put function code into d0
trap &VRTX # call VRTX
mov.l (32,%sp),%a0 # place return status code into
mov.l %d0,(%a0) # desired address
mov.l %d2,%d0 # return event flag group value
mov.l (%sp)+,%d4 # restore registers
mov.l (%sp)+,%d3
mov.l (%sp)+,%d2
rts
F I G U R E 1 1
####################################################
# NAME
# sc_pend - pend for message from mailbox
#
# SYNOPSIS
# char *sc_pend(boxadr,timeout,status)
# char *boxadr mailbox address
# int timeout timeout value
# int *status return status ptr
#
# DESCRIPTION
# The sc_pend call obtains a 32-bit nonzero
# message from the specified mailbox.
#
# RETURNS
# message
#
# RETURN CODES
# RET_OK successful return
# ER_TMO timeout occurred
####################################################
set VRTX,0 # set VRTX trap number
set FCODE,0x09 # set VRTX function code
text
global sc_pend
sc_pend:
mov.l (4,%sp),%a0 # put mailbox address into a0
mov.l (8,%sp),%d1 # put timeout value into d1
mov.l &FCODE,%d0 # put function code into d0
trap &VRTX # call VRTX
mov.l (12,%sp),%a0 # place return status code into
mov.l %d0,(%a0) # desired address
mov.l %d1,%a0 # return message
rts
F I G U R E 1 2
####################################################
# NAME
# sc_putc - put character
#
# SYNOPSIS
# sc_putc(c)
# int c character
#
# DESCRIPTION
# The sc_putc call specifies the next character
# to transmit to the supported i/o device.
#
####################################################
set VRTX,0 # set VRTX trap number
set FCODE,0x0e # set VRTX function code
text
global sc_putc
sc_putc:
mov.l (4,%sp),%d1 # put message into d1
mov.l &FCODE,%d0 # put function code into d0
trap &VRTX # call VRTX
rts
F I G U R E 1 3
####################################################
# NAME
# sc_getc - get character
#
# SYNOPSIS
# int sc_getc()
#
# DESCRIPTION
# The sc_getc call obtains the next character
# from the supported i/o device.
#
# RETURNS
# next character
####################################################
set VRTX,0 # set VRTX trap number
set FCODE,0x0d # set VRTX function code
text
global sc_getc
sc_getc:
mov.l &FCODE,%d0 # set function code
trap &VRTX # call VRTX
clr.l %d0
mov.b %d1,%d0 # return received char
rts
F I G U R E 2
/*******************************/
/* TEST FUNCTION RETURN VALUES */
/*******************************/
main()
{
void f_noret(); /* no return value */
int f_int(); /* integer return */
char *f_charpt(); /* char pointer return */
register int intval;
register char *ptrval;
/* store junk */
intval = 1; mov.l &1,%d2
ptrval = (char *)5000; mov.l &5000,%a2
/* call "procedure" */
f_noret(); jsr f_noret
/* call int function */
intval = f_int(); jsr f_int
mov.l %d0,%d2
/* call char ptr function */
ptrval = f_charpt(); jsr f_charpt
mov.l %a0,%a2
} rts
F I G U R E 3
/**************************/
/* TEST PARAMETER PASSING */
/**************************/
main()
{
void f_test(); /* test function */
int status; /* status return */
register int intval;
register char *chptr;
f_test(intval, chptr, &status); mov.l &status,(%sp)
mov.l %a2,-(%sp)
mov.l %d2,-(%sp)
jsr f_test
add.l &12,%sp
} rts
void f_test(p1, p2, stat)
int p1;
char *p2;
int *stat;
{
*stat = 17; mov.l (12,%sp),%a0
mov.l &17,(%a0)
} rts
F I G U R E 4
# status returned, no data returned
#
# C INTERFACE:
# void syscall();
# int intval, status;
#
# syscall(intval, &status);
#
# ASSEMBLY INTERFACE:
# INPUT: d0 function code
# d1 integer input parameter
# OUTPUT: d0 status code
mov.l (4,%sp),%d1 # put input parameter into d1
mov.l &FCODE,%d0 # put function code into d0
trap &VRTX # call VRTX
mov.l (8,%sp),%a0 # place return status code into
mov.l %d0,(%a0) # desired address
rts
F I G U R E 5
# status returned, integer data value returned
#
# C INTERFACE:
# int syscall();
# int intval1, intval2, status;
# int dataval;
#
# dataval = syscall(intval1, intval2, &status);
#
# ASSEMBLY INTERFACE:
# INPUT: d0 function code
# d1 integer input parameter
# d2 integer input parameter
# OUTPUT: d0 status code
# d2 integer result
mov.l %d2,-(%sp) # save register
mov.l (8,%sp),%d1 # put input parameter1 into d1
mov.l (12,%sp),%d2 # put input parameter2 into d2
mov.l &FCODE,%d0 # put function code into d0
trap &VRTX # call VRTX
mov.l (16,%sp),%a0 # place return status code into
mov.l %d0,(%a0) # desired address
mov.l %d2,%d0 # return integer data value
mov.l (%sp)+,%d2 # restore register
rts
F I G U R E 6
# status returned, character pointer data value returned
#
# C INTERFACE:
# char *syscall();
# char *adrval;
# int intval, status;
# char *dataval;
#
# dataval = syscall(adrval, intval, &status);
#
# ASSEMBLY INTERFACE:
# INPUT: d0 function code
# d1 integer input parameter
# a0 char pointer input parameter
# OUTPUT: d0 status code
# d1 char pointer result
mov.l (4,%sp),%a0 # put address parameter into a0
mov.l (8,%sp),%d1 # put integer parameter into d1
mov.l &FCODE,%d0 # put function code into d0
trap &VRTX # call VRTX
mov.l (12,%sp),%a0 # place return status code into
mov.l %d0,(%a0) # desired address
mov.l %d1,%a0 # return message
rts
F I G U R E 7
# no status returned, no data value returned
#
# C INTERFACE:
# void syscall();
# int intval;
#
# syscall(intval);
#
# ASSEMBLY INTERFACE:
# INPUT: d0 function code
# d1 integer input parameter
# OUTPUT: d0 status code (always indicates success)
mov.l (4,%sp),%d1 # put integer parameter into d1
mov.l &FCODE,%d0 # put function code into d0
trap &VRTX # call VRTX
rts
F I G U R E 8
# no status returned, integer data value returned
#
# C INTERFACE:
# int syscall();
# int dataval;
#
# dataval = syscall();
#
# ASSEMBLY INTERFACE:
# INPUT: d0 function code
# OUTPUT: d0 status code (always indicates success)
# d1 integer result
mov.l &FCODE,%d0 # set function code
trap &VRTX # call VRTX
mov.l %d1,%d0 # return integer result
rts
F I G U R E 9
####################################################
# NAME
# sc_post - post message to mailbox
#
# SYNOPSIS
# sc_post(boxadr,msg,status)
# char *boxadr mailbox address
# char *msgadr message
# int *status return status ptr
#
# DESCRIPTION
# The sc_post call posts a 32-bit nonzero
# message to the specified mailbox.
#
# RETURN CODES
# RET_OK successful return
# ER_MIU mailbox in use
# ER_ZMW zero message
####################################################
set VRTX,0 # set VRTX trap number
set FCODE,0x08 # set VRTX function code
text
global sc_post
sc_post:
mov.l (4,%sp),%a0 # put mailbox address into a0
mov.l (8,%sp),%d1 # put message into d1
mov.l &FCODE,%d0 # put function code into d0
trap &VRTX # call VRTX
mov.l (12,%sp),%a0 # place return status code into
mov.l %d0,(%a0) # desired address
rts